package bo;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

import android.app.Activity;
import android.app.ProgressDialog;
import android.util.Log;
import android.widget.Toast;

import com.steam.splace.ProfileActivity;


public class UploadToServer {
	Activity contextParent;
	ProgressDialog dialog;
	String returnUrl;
    String upLoadServerUri = "http://cogidau.com/upload";
	private int serverResponseCode = 0;
	public UploadToServer(Activity contextParent){this.contextParent=contextParent;
	}
    public String uploadFile(String sourceFileUri) {
    	contextParent.runOnUiThread(new Runnable() {
    		  public void run() {
    			  dialog = ProgressDialog.show(contextParent, "", "Đang tải...", true);
    		  }
    		});
    	
        String fileName = sourceFileUri;

        HttpURLConnection conn = null;
        DataOutputStream dos = null;  
        String lineEnd = "\r\n";
        String twoHyphens = "--";
        String boundary = "*****";
        int bytesRead, bytesAvailable, bufferSize;
        byte[] buffer;
        int maxBufferSize = 1 * 1024 * 1024; 
        File sourceFile = new File(sourceFileUri); 
         
        if (!sourceFile.isFile()) {
             dialog.dismiss(); 
             contextParent.runOnUiThread(new Runnable() {
                 public void run() {
                     Toast.makeText(contextParent, "File không tồn tại ", Toast.LENGTH_SHORT).show();
                 }
             }); 
             return "";
        }
        else
        {
             try { 
                  
                   // open a URL connection to the Servlet
                 FileInputStream fileInputStream = new FileInputStream(sourceFile);
                 URL url = new URL(upLoadServerUri);
                  
                 // Open a HTTP  connection to  the URL
                 conn = (HttpURLConnection) url.openConnection(); 
                 conn.setDoInput(true); // Allow Inputs
                 conn.setDoOutput(true); // Allow Outputs
                 conn.setUseCaches(false); // Don't use a Cached Copy
                 conn.setRequestMethod("POST");
                 conn.setRequestProperty("Connection", "Keep-Alive");
                 conn.setRequestProperty("ENCTYPE", "multipart/form-data");
               //  A special header informs the server that this will be a multipart form submission.
                 conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
                 conn.setRequestProperty("uploaded_file", fileName); 
                  
                 dos = new DataOutputStream(conn.getOutputStream());
        
                 dos.writeBytes(twoHyphens + boundary + lineEnd); 
              // These strings are sent in the request body. They provide information about the file being uploaded
                 dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\""
                                           + fileName + "\"" + lineEnd);
                  
                 dos.writeBytes(lineEnd);
        
                 // create a buffer of  maximum size
                 bytesAvailable = fileInputStream.available(); 
        
                 bufferSize = Math.min(bytesAvailable, maxBufferSize);
                 buffer = new byte[bufferSize];
        
                 // read file and write it into form...
                 bytesRead = fileInputStream.read(buffer, 0, bufferSize);  
                    
                 while (bytesRead > 0) {
                   dos.write(buffer, 0, bufferSize);
                   bytesAvailable = fileInputStream.available();
                   bufferSize = Math.min(bytesAvailable, maxBufferSize);
                   bytesRead = fileInputStream.read(buffer, 0, bufferSize);   
                  }
        
                 // send multipart form data necesssary after file data...
                 dos.writeBytes(lineEnd);
                 dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
                 
                 InputStream is = conn.getInputStream();
                 BufferedReader rd = new BufferedReader(new InputStreamReader(is));
                 String line;
                 StringBuffer response = new StringBuffer(); 
                 while((line = rd.readLine()) != null) {
                   response.append(line);
                   response.append('\r');
                 }
                 rd.close();
                 try{
                 JSONParser jsonParser = new JSONParser();
                 JSONObject jsonObject=(JSONObject) jsonParser.parse(response.toString());
     			Object s=jsonObject.get("message");
     			
                 returnUrl=upLoadServerUri+"s/"+ s.toString();}
                 catch(Exception ex){}
                 // Responses from the server (code and message)
                 serverResponseCode = conn.getResponseCode();
                 String serverResponseMessage = conn.getResponseMessage();
                   
                 Log.i("uploadFile", "HTTP Response is : "
                         + serverResponseMessage + ": " + serverResponseCode);
                  
                 if(serverResponseCode == 200){
                      
                    contextParent.runOnUiThread(new Runnable() {
                          public void run() {
                             Toast.makeText(contextParent, "Upload thành công.", Toast.LENGTH_SHORT).show();
                          }
                      });                
                 }    
                  
                 //close the streams //
                 fileInputStream.close();
                 dos.flush();
                 dos.close();
                   
            } catch (MalformedURLException ex) {
                 
                dialog.dismiss();  
                ex.printStackTrace();
                 
                contextParent.runOnUiThread(new Runnable() {
                    public void run() {
                        Toast.makeText(contextParent, "Sai url", Toast.LENGTH_SHORT).show();
                    }
                });
                 
                Log.e("Upload file to server", "error: " + ex.getMessage(), ex);  
            } catch (Exception e) {
                 
                dialog.dismiss();  
                e.printStackTrace();
          /*       
                contextParent.runOnUiThread(new Runnable() {
                    public void run() {
                        Toast.makeText(contextParent, "Got Exception : see logcat ", Toast.LENGTH_SHORT).show();
                    }
                });*/
                Log.e("Upload file to server Exception", "Lỗi : "  + e.getMessage(), e);  
            }
            dialog.dismiss();       
            return returnUrl; 
             
         } // End else block 
       }
}
